﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using System.Collections;
using Log4Net;

namespace HotelGUI
{
    public partial class ABMImpuestos : Form
    {
        ISistema sistema;
        String LlenarCamposObligatorios = "Debe llenar todos los datos.";
        ILog log = FactoryLogs.getLogInstance();
        List<string[]> paises = null;

        public ABMImpuestos()
        {
            InitializeComponent();
            sistema=Dominio.Fabrica.getSistema();
            paises = sistema.obtenerPaises(true);
            foreach (string[] pais in paises)
            {
                cmbPais.Items.Add(pais[1]);
            }

        }

        public void setPais(string nomPais)
        {
            cmbPais.SelectedItem = nomPais;
        }

        private void ABMImpuestos_Load(object sender, EventArgs e)
        {
            btnAgregar.Enabled = true;
            btnModificar.Enabled = false;
        }

        private void limpiarForm()
        {
            txtImpuesto.Text = "";
            mtValor.Text = "";
            cbEstado.Checked = false;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (cmbPais.SelectedIndex >= 0)
            {
                if (txtImpuesto.Text != "" && mtValor.Text != "" && cmbPais.SelectedIndex >= 0)
                {
                    int n = -10;
                    char estado;
                    try
                    {
                        if (cbEstado.Checked)
                            estado = 'N';
                        else
                            estado = 'S';

                        float valor = float.Parse(mtValor.Text.Trim());
                        int orden = dgvImpuestos.Rows.Count+1;

                        int num = sistema.altaImpuesto(idPaisSeleccionado(cmbPais.SelectedItem.ToString()), txtImpuesto.Text.Trim(), valor, orden, estado);
                        lblIdImpuesto.Text = num.ToString();
                        n = dgvImpuestos.Rows.Add();
                        dgvImpuestos.Rows[n].Cells["idImpuesto"].Value = lblIdImpuesto.Text.Trim();
                        dgvImpuestos.Rows[n].Cells["Impuesto"].Value = txtImpuesto.Text.Trim();
                        dgvImpuestos.Rows[n].Cells["Valor"].Value = mtValor.Text.Trim();
                        dgvImpuestos.Rows[n].Cells["Activa"].Value = estado.ToString();

                        dgvImpuestos.Refresh();
                        log.info(sistema.obtenerIdUsuarioLogueado(), "Creacion de nuevo Impuesto: " + lblIdImpuesto.Text.Trim()); 
                        limpiarForm();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        try
                        {
                            dgvImpuestos.Rows.RemoveAt(n);
                        }
                        catch (Exception ex2)
                        {
                            MessageBox.Show(this, ex2.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                else
                    MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
                MessageBox.Show(this, "Debe seleccionar un pais.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (txtImpuesto.Text != "")
            {
                try
                {
                    int numFila = 0;
                    while (dgvImpuestos.RowCount > numFila && lblIdImpuesto.Text.Trim() != dgvImpuestos.Rows[numFila].Cells["idImpuesto"].Value.ToString())
                    {
                        numFila++;
                    }
                    if (numFila != dgvImpuestos.RowCount)
                    {
                        char estado;
                        if (cbEstado.Checked)
                            estado = 'N';
                        else
                            estado = 'S';
                        sistema.modificarImpuesto(int.Parse(lblIdImpuesto.Text),txtImpuesto.Text.Trim(), float.Parse(mtValor.Text.Trim()), estado);
                        dgvImpuestos.Rows[numFila].Cells["Impuesto"].Value = txtImpuesto.Text.Trim();
                        dgvImpuestos.Rows[numFila].Cells["Valor"].Value = mtValor.Text.Trim();
                        dgvImpuestos.Rows[numFila].Cells["Activa"].Value = estado.ToString();
 
                        btnAgregar.Enabled = true;
                        btnModificar.Enabled = false;
                        log.info(sistema.obtenerIdUsuarioLogueado(), "Modificacion de Impuesto: " + lblIdImpuesto.Text.Trim());
                        limpiarForm();

                    }
                }

                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            limpiarForm();
            btnAgregar.Enabled = true;
            btnModificar.Enabled = false;
        }

        private void cmbPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            //MessageBox.Show("Cambio el Item del ComboBox");
            if (cmbPais.SelectedIndex >= 0)
            {
                while (dgvImpuestos.Rows.Count >= 1)
                {
                    dgvImpuestos.Rows.RemoveAt(0);
                }

                List<String[]> imps = sistema.traerImpuestos(idPaisSeleccionado(cmbPais.SelectedItem.ToString()), false);
                foreach (String[] impuesto in imps)
                {
                    int n = -10;
                    try
                    {
                        n = dgvImpuestos.Rows.Add();
                        dgvImpuestos.Rows[n].Cells["idImpuesto"].Value = impuesto[0];
                        dgvImpuestos.Rows[n].Cells["Impuesto"].Value = impuesto[1];
                        dgvImpuestos.Rows[n].Cells["Valor"].Value = impuesto[2];
                        dgvImpuestos.Rows[n].Cells["Activa"].Value = impuesto[4];

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Error Cargando los Impuestos. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        if (n >= 0)
                            try
                            {
                                dgvImpuestos.Rows.RemoveAt(n);
                            }
                            catch (Exception ex1)
                            {
                                MessageBox.Show(this, ex1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                    }
                }
            }
        }


      
    

        private int idPaisSeleccionado(string nomPais)
        {
            int res = -1;
            foreach (string [] pais in paises)
            {
                if (pais[1] == nomPais)
                {
                    res = int.Parse(pais[0]);
                    break;
                }

            }
            return res;
        }

        private void btnArrowUp_Click(object sender, EventArgs e)
        {
            if (dgvImpuestos.SelectedRows.Count > 0 && dgvImpuestos.SelectedRows[0].Index > 0)
            {
                DataGridViewRow fila = dgvImpuestos.SelectedRows[0];
                int filaNumOrig = fila.Index;
                int numLineaSeleccionada = filaNumOrig;
                DataGridViewRow filaAnt = null;
                int filaAntNumOrig = -1;
                if (dgvImpuestos.Rows.Count > 1)
                {
                    filaAnt = dgvImpuestos.Rows[fila.Index - 1];
                    filaAntNumOrig = filaAnt.Index;
                }
                try
                {
                    
                    
                    numLineaSeleccionada = numLineaSeleccionada - 1;
                    if (numLineaSeleccionada >= 0)
                    {
                        dgvImpuestos.Rows.Remove(fila);
                        dgvImpuestos.Rows.Insert(numLineaSeleccionada, fila);
                        dgvImpuestos.Rows[numLineaSeleccionada].Selected = true;
                        sistema.setOrdenImpuesto(int.Parse(fila.Cells[0].Value.ToString()), numLineaSeleccionada + 1);
                        if (filaAnt != null)
                            sistema.setOrdenImpuesto(int.Parse(filaAnt.Cells[0].Value.ToString()), filaAnt.Index + 1);
                    }
                }
                catch (Exception ex)
                {
                    dgvImpuestos.Rows.Remove(fila);
                    dgvImpuestos.Rows.Insert(filaNumOrig, fila);
                    if (filaAnt != null)
                    {
                        dgvImpuestos.Rows.Remove(filaAnt);
                        dgvImpuestos.Rows.Insert(filaAntNumOrig, filaAnt);
                    }
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void btnArrowDown_Click(object sender, EventArgs e)
        {
            if (dgvImpuestos.SelectedRows.Count > 0 && dgvImpuestos.SelectedRows[0].Index < dgvImpuestos.Rows.Count-1)
            {
                if (dgvImpuestos.SelectedRows.Count > 0)
                {
                    DataGridViewRow fila = dgvImpuestos.SelectedRows[0];
                    int filaNumOrig = fila.Index;
                    DataGridViewRow filaAnt=null;
                    int filaAntNumOrig=-1;
                    if (dgvImpuestos.Rows.Count > 1)
                    {
                        filaAnt = dgvImpuestos.Rows[fila.Index + 1];
                        filaAntNumOrig = filaAnt.Index;
                    }
                    int numLineaSeleccionada = dgvImpuestos.Rows.IndexOf(fila);
                    numLineaSeleccionada = numLineaSeleccionada + 1;
                    try
                    {
                        if (dgvImpuestos.SelectedRows[0].Index < dgvImpuestos.Rows.Count - 1)
                        {
                            dgvImpuestos.Rows.Remove(fila);
                            dgvImpuestos.Rows.Insert(numLineaSeleccionada, fila);
                            dgvImpuestos.Rows[numLineaSeleccionada].Selected = true;
                            sistema.setOrdenImpuesto(int.Parse(fila.Cells[0].Value.ToString()), numLineaSeleccionada + 1);
                            if (filaAnt != null)
                                sistema.setOrdenImpuesto(int.Parse(filaAnt.Cells[0].Value.ToString()), filaAnt.Index + 1);
                        }

                    }
                    catch (Exception ex)
                    {
                        dgvImpuestos.Rows.Remove(fila);
                        dgvImpuestos.Rows.Insert(filaNumOrig, fila);
                        if (filaAnt != null)
                        {
                            dgvImpuestos.Rows.Remove(filaAnt);
                            dgvImpuestos.Rows.Insert(filaAntNumOrig, filaAnt);
                        }
                        MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }


        private void dgvImpuestos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }
            lblIdImpuesto.Text = dgvImpuestos.Rows[e.RowIndex].Cells["idImpuesto"].Value.ToString();
            txtImpuesto.Text = dgvImpuestos.Rows[e.RowIndex].Cells["Impuesto"].Value.ToString();
            mtValor.Text = dgvImpuestos.Rows[e.RowIndex].Cells["Valor"].Value.ToString();
            if (dgvImpuestos.Rows[e.RowIndex].Cells["Activa"].Value.ToString() == "N")
                cbEstado.Checked = true;
            else
                cbEstado.Checked = false;
            btnAgregar.Enabled = false;
            btnModificar.Enabled = true;
        }



    }
}
